package com.sophossystems.client.asmon.action;

import java.util.List;

import org.apache.log4j.Logger;
import org.jfree.util.Log;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.sophossystems.client.asmon.dto.ClientePMoralesDTO;
import com.sophossystems.client.asmon.dto.ClientePersonasFisicasDTO;
import com.sophossystems.client.asmon.model.PersonaFisica;
import com.sophossystems.client.asmon.service.ClientService;


public class PersonaFisicaAction extends ActionSupport implements
		ModelDriven<PersonaFisica>{
	private static final long serialVersionUID = 1L;
	private static Logger logger = Logger.getLogger(PersonaFisicaAction.class);
	private PersonaFisica persona = null;
	private List<PersonaFisica> listaPersona;
	private ClientService clientService;
	String nombrePersonaFisica = "";
	
	
	private void springRegistro()
	{
		logger.debug("En la context Clientes");
		
		XmlBeanFactory bf = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
		clientService = (ClientService)bf.getBean("clientService");
	}

	public String registarPersonaFisica() {
		logger.debug("En la context registarPersonaFisica");
		springRegistro();
		String resultado = "";
		ClientePersonasFisicasDTO clienteRegistrado = new ClientePersonasFisicasDTO();
		ClientePersonasFisicasDTO personaFisica = persona.mapper();
		try{
		clienteRegistrado = clientService.registarPersonaFisica(personaFisica);
		}
		catch(Exception ex){
			logger.debug("error al insertar persona fisica Action, causa: " + ex.getCause());
		}
		if(clienteRegistrado.getClientedto().isRegistrado() == false){
			nombrePersonaFisica = clienteRegistrado.getaPaterno() + " " + clienteRegistrado.getaMaterno() +
					" " + clienteRegistrado.getNombres();
			persona.setRegistrado(true);
			persona.setRfcRegistrado(clienteRegistrado.getClientedto().getRfc());
			persona.setNombreRegistrado(nombrePersonaFisica);
			persona.clean();
			resultado = SUCCESS;

			
		}else{
			nombrePersonaFisica = clienteRegistrado.getaPaterno() + " " + clienteRegistrado.getaMaterno() +
					" " + clienteRegistrado.getNombres();
			persona.clean();
			persona.setYaRegistrado(true);
			persona.setRfcRegistrado(clienteRegistrado.getClientedto().getRfc());
			persona.setNombreRegistrado(nombrePersonaFisica);
			persona.unMapper(clienteRegistrado);
			resultado = ERROR;

		}
		return resultado;
	}

	public String consultarDetallePersonaFisica() {

		logger.debug("En la context consultarDetallePersonaFisica");
		springRegistro();
		String resultado = "";
		ClientePersonasFisicasDTO detalleClienteRegistrado = new ClientePersonasFisicasDTO();
		ClientePersonasFisicasDTO personaFisica = persona.mapper();
		try {
			detalleClienteRegistrado = clientService.consultarDetallePersonaFisica(personaFisica);
		} catch (Exception e) {
			logger.debug("error al buscar detalle persona fisica Action, causa: " + e.getCause());
		}
		if(detalleClienteRegistrado.getIdClienteGeneral() != 0){
			persona.unMapper(detalleClienteRegistrado);
			resultado = SUCCESS;
		}else{
			resultado = ERROR;
		}
		return resultado;
	}
	
	public String consultarPersonasFisicas() {
		springRegistro();
		String resultado ="";
		return resultado;
	}
	
	
	public String modifcarPersonasFisicas() {
		logger.debug("En la context modifcarPersonasFisicas");
		springRegistro();
		String resultado = "";
		String status = "";
		System.out.println(persona.isActualizado());
		if(persona.isActualizado() == false){
			persona.setPorActualizar(true);
		}else{
			persona.setPorActualizar(false);
		}
		System.out.println(persona.getRfc());
		System.out.println(persona.isPorActualizar());
		System.out.println(persona.getLugarRecoleccion());
		ClientePersonasFisicasDTO personaFisica = null;
		ClientePersonasFisicasDTO actualizarCliente = null;
		if(persona.isPorActualizar()==true){
			personaFisica = persona.mapper();
			System.out.println(persona.getIdCliente());
			try {
				actualizarCliente = clientService.consultarDetallePersonaFisica(personaFisica);
			} catch (Exception e) {
				logger.error("Error al buscar cliente a actualizar en action, causa: " + e.getCause());
			}
			persona.unMapper(actualizarCliente);
			System.out.println(persona.getIdCliente());
			resultado = "input";
		}else{
			System.out.println(persona.getIdCliente());
			System.out.println(persona.getLugarRecoleccion());
			personaFisica= persona.mapper();
			System.out.println(personaFisica.getIdCliente());
			System.out.println(personaFisica.getClientedto().getListaDirecciones().size());
			
			System.out.println(personaFisica.getNombres());
			try {
				status = clientService.modifcarPersonasFisicas(personaFisica);
			} catch (Exception e) {
				logger.error("Error al actualizar al cliente en action, causa: " + e.getCause());
			}
			if(status == "updated"){
				persona.clean();
				persona.setYaRegistrado(false);
				persona.setRegistrado(false);
				persona.setActualizado(true);
				persona.setNombreRegistrado(personaFisica.getaPaterno() + " " + personaFisica.getaMaterno() + " " + 
				personaFisica.getNombres());
				persona.setRfcRegistrado(personaFisica.getClientedto().getRfc());
				resultado = SUCCESS;
			}else{
				resultado = ERROR;
			}
		}
		 
		return resultado;
	}
	
	public String borrarPersonaFisica() {
		this.springRegistro();
		logger.debug("En la context borrarPersonaFisica");
		String resultado = "";
		ClientePersonasFisicasDTO personaFisica = persona.mapper();
		try {
			resultado = clientService.borrarPersonaFisica(personaFisica);
		} catch (Exception e) {
			logger.debug("error al eliminar persona fisica Action, causa: " + e.getCause());
		}
		if(resultado == "error"){
			resultado = ERROR;
		}else{
			persona.clean();
			persona.setYaRegistrado(false);
			persona.setRegistrado(false);
			persona.setActualizado(false);
			resultado = SUCCESS;
		}
		return resultado;
	}
	

	/*public PersonaFisica getPersona() {
		logger.debug("En getPersona");
		return persona;
	}

	public void setPersona(PersonaFisica persona) {
		logger.debug("En setPersona");
		this.persona = persona;
	}

*/
	
	public PersonaFisicaAction(){
		persona =  new PersonaFisica();
	}

	@Override
	public PersonaFisica getModel() {
		return persona;
	}

	public List<PersonaFisica> getListaPersona() {
		return listaPersona;
	}

	public void setListaPersona(List<PersonaFisica> listaPersona) {
		this.listaPersona = listaPersona;
	}
}
